package com.shm.t360;

import java.util.Scanner;

/**
 * 装载货物
 * 时间限制： 3000MS
 * 内存限制： 786432KB
 * 题目描述：
 * 搬家公司正在帮助一家人将小物体装箱。一个箱子的大小是有限的，公司可以把一个箱子分成最多k个独立的隔间，将一个箱子分成r个隔间需要r-1个隔板（这一个箱子没有放隔板也拥有一个本身的隔间）。而这一次搬家工作只携带了b个隔板。
 *
 * 在每一个隔间中，由于物件放多了容易损坏，最多只能放v个物体。现在这家人有a个物体，请问最少需要多少个箱子，才能将所有的物体装箱？
 *
 *
 *
 * 输入描述
 * 多组数据，每一行一组数据包含4个数，a,b,k,v,空格隔开
 *
 * 输出描述
 * 输出包含一个数，即最少的箱子数
 *
 *
 * 样例输入
 * 10 3 2 1
 * 10 3 2 2
 * 样例输出
 * 7
 * 3
 *
 * 提示
 * 范围：1<=a,b,k,v<=100000，数据组数不会超过1000组
 * 样例解释：
 * 对于样例1，第1,2,3个箱子分成两个隔间，使用掉了3个隔板，装了6个物件。第4,5,6,7个箱子没有使用隔板，装了4个物件。共7个箱子装完了所有物件。
 * 对于样例2，第1,2个箱子分成两个隔间，使用掉了2个隔板，装了8个物件，最后两个物件装在第三个箱子中。
 * @author SHM
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true){
            String str = sc.nextLine();
            String[] s = str.split(" ");
            int i = minBox(s);
            System.out.println(i);
        }
    }

    public static int minBox(String[] ss){
        int minBox = 0;
        int a=Integer.parseInt(ss[0]);
        int b=Integer.parseInt(ss[1]);
        int k=Integer.parseInt(ss[2]);
        int v=Integer.parseInt(ss[3]);
        while (a>0){
            if (b>(k-1)) {
                b -= (k - 1);
                a -= (v*k);
            }else if (b>0){
                a-=(v*(b+1));
                b=0;
            }else {
                a-=v;
            }
            minBox++;
        }
        return minBox;
    }
}
